package itheima02;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/*
    Lambda表达式的省略格式
        1.数据类型可以省略: (Person p) -> {}        省略格式  (p) -> {}
        2.如果只有一个参数: ()可以省略  (p) -> {}    省略格式  p -> {}
        3.->: 永远不能省略
        4.如果{}中只有一句话,那么{},return,分号,都可以省略
            但是要么全部省略,要么不省略

        List集合存储多个Person对象,完成对List集合的排序,按照年龄升序排序

        java.util.Collections工具类:
        静态方法:
            public static <T> void sort(List<T> list, Comparator<T> comp)
                功能: 对方法参数中的集合list,按照方法参数comp指定的规则进行排序
                参数:
                  T[] arr: 数组
                  Comparator<T> comp: 接口
                  java.util.Comparator<T>接口: 用来指定排序规则的
                  抽象方法:
                  public abstract int compare(T t1,T t2):
                    第一个参数-第二个参数: 升序
                    第二个参数-第一个参数: 降序
                //年龄升序排列:
                 public int compare(Person p1,Person p2){
                    return p1.getAge() - p2.getAge();
                 }
 */
public class Demo05Lambda {
    public static void main(String[] args) {
        List<Person> list = new ArrayList<>();
        //添加数据
        Collections.addAll(list,
                new Person("张三",28),
                new Person("李四",18),
                new Person("王五",38));
        System.out.println("排序前: "+list);

        //1.匿名内部类对象的方式: 年龄升序
        Collections.sort(list, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge()-o2.getAge();
            }
        });
        System.out.println("年龄升序排序后: "+list);

        //2.lambda表达式的标准方式: 年龄降序
        Collections.sort(list,(Person o1, Person o2)->{return o2.getAge() - o1.getAge();});
        System.out.println("年龄降序排序后: "+list);

        //3.lambda表达式的简化方式
        Collections.sort(list,(p1,p2)->p1.getAge() - p2.getAge());
        System.out.println("年龄升序排序后: "+list);
    }
}
